<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<meta name="theme-color" content="#222"><meta name="generator" content="Hexo 7.3.0">

  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.ico">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.ico">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">



<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha256-wiz7ZSCn/btzhjKDQBms9Hx4sSeUYsDrTLg7roPstac=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.1.1/animate.min.css" integrity="sha256-PR7ttpcvz8qrF57fur/yAx1qXMFJeJFiA6pSzWi0OIE=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancyapps-ui/5.0.28/fancybox/fancybox.css" integrity="sha256-6cQIC71/iBIYXFK+0RHAvwmjwWzkWd+r7v/BX3/vZDc=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/pace/1.2.4/themes/green/pace-theme-minimal.css">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/pace/1.2.4/pace.min.js" integrity="sha256-gqd7YTjg/BtfqWSwsJOvndl0Bxc8gFImLEkXQT8+qj0=" crossorigin="anonymous"></script>

<script class="next-config" data-name="main" type="application/json">{"hostname":"sumumm.github.io","root":"/","images":"/images","scheme":"Gemini","darkmode":false,"version":"8.19.2","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12},"copycode":{"enable":true,"style":"mac"},"fold":{"enable":true,"height":300},"bookmark":{"enable":false,"color":"#222","save":"auto"},"mediumzoom":false,"lazyload":true,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"stickytabs":false,"motion":{"enable":true,"async":true,"transition":{"menu_item":"fadeInDown","post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"i18n":{"placeholder":"搜索...","empty":"没有找到任何搜索结果：${query}","hits_time":"找到 ${hits} 个搜索结果（用时 ${time} 毫秒）","hits":"找到 ${hits} 个搜索结果"},"path":"/search.xml","localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false}}</script><script src="/js/config.js"></script>

    <meta name="description" content="本文主要是C语言基础——数据类型相关笔记，若笔记中有错误或者不合适的地方，欢迎批评指正😃。">
<meta property="og:type" content="article">
<meta property="og:title" content="LV01-01-C语言-数据类型">
<meta property="og:url" content="https://sumumm.github.io/post/e8ba6a9c.html">
<meta property="og:site_name" content="苏木">
<meta property="og:description" content="本文主要是C语言基础——数据类型相关笔记，若笔记中有错误或者不合适的地方，欢迎批评指正😃。">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/LV01-01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/img/1641269764160.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/LV01-01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/img/image-20220330170351148.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/LV01-01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/img/image-20220331190334664.png">
<meta property="og:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/LV01-01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/img/image-20220331190408975.png">
<meta property="article:published_time" content="2022-01-10T08:29:55.000Z">
<meta property="article:modified_time" content="2025-06-13T16:25:56.983Z">
<meta property="article:author" content="苏木">
<meta property="article:tag" content="LV01-C语言基础">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/LV01-01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/img/1641269764160.png">


<link rel="canonical" href="https://sumumm.github.io/post/e8ba6a9c.html">



<script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":false,"isPost":true,"lang":"zh-CN","comments":true,"permalink":"https://sumumm.github.io/post/e8ba6a9c.html","path":"post/e8ba6a9c.html","title":"LV01-01-C语言-数据类型"}</script>

<script class="next-config" data-name="calendar" type="application/json">""</script>
<title>LV01-01-C语言-数据类型 | 苏木</title>
  








    <script src="/js/browser_tools_disable.js"></script>

  <noscript>
    <link rel="stylesheet" href="/css/noscript.css">
  </noscript>
<!-- hexo injector head_end start --><link rel="stylesheet" href="https://unpkg.com/hexo-next-tags-plus@latest/lib/tag_plus.css" media="defer" onload="this.media='all'"><!-- hexo injector head_end end --></head>

<body itemscope itemtype="http://schema.org/WebPage" class="use-motion">
  <div class="headband"></div>

  <main class="main">
    <div class="column">
      <header class="header" itemscope itemtype="http://schema.org/WPHeader"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏" role="button">
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <i class="logo-line"></i>
      <p class="site-title">苏木</p>
      <i class="logo-line"></i>
    </a>
      <p class="site-subtitle" itemprop="description">我的学习之路</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger" aria-label="搜索" role="button">
        <i class="fa fa-search fa-fw fa-lg"></i>
    </div>
  </div>
</div>



<nav class="site-nav">
  <ul class="main-menu menu"><li class="menu-item menu-item-home"><a href="/" rel="section"><i class="fa fa-home fa-fw"></i>苏木的家</a></li><li class="menu-item menu-item-categories"><a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类页<span class="badge">42</span></a></li><li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档页<span class="badge">673</span></a></li><li class="menu-item menu-item-flink"><a href="/flink/" rel="section"><i class="fa fa-link fa-fw"></i>友人帐</a></li><li class="menu-item menu-item-about"><a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>关于我</a></li>
      <li class="menu-item menu-item-search">
        <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
        </a>
      </li>
  </ul>
</nav>



  <div class="search-pop-overlay">
    <div class="popup search-popup"><div class="search-header">
  <span class="search-icon">
    <i class="fa fa-search"></i>
  </span>
  <div class="search-input-container">
    <input autocomplete="off" autocapitalize="off" maxlength="80"
           placeholder="搜索..." spellcheck="false"
           type="search" class="search-input">
  </div>
  <span class="popup-btn-close" role="button">
    <i class="fa fa-times-circle"></i>
  </span>
</div>
<div class="search-result-container no-result">
  <div class="search-result-icon">
    <i class="fa fa-spinner fa-pulse fa-5x"></i>
  </div>
</div>

    </div>
  </div>

</header>
        
  
  <aside class="sidebar">

    <div class="sidebar-inner sidebar-nav-active sidebar-toc-active">
      <ul class="sidebar-nav">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <div class="sidebar-panel-container">
        <!--noindex-->
        <div class="post-toc-wrap sidebar-panel">
            <div class="post-toc animated"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%B8%80%E3%80%81%E6%95%B0%E6%8D%AE%E7%9A%84%E5%BD%A2%E5%BC%8F"><span class="nav-text">一、数据的形式</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%BA%8C%E3%80%81%E6%95%B0%E6%8D%AE%E8%A1%A8%E7%A4%BA"><span class="nav-text">二、数据表示</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#1-%E6%95%B0%E5%80%BC%E6%95%B0%E6%8D%AE"><span class="nav-text">1. 数值数据</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#2-%E9%9D%9E%E6%95%B0%E5%80%BC%E6%95%B0%E6%8D%AE-ASCII"><span class="nav-text">2. 非数值数据( ASCII )</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%BA%8C%E3%80%81%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B"><span class="nav-text">二、数据类型</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#1-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%8F%8A%E6%A0%87%E8%AF%86%E7%AC%A6"><span class="nav-text">1. 数据类型及标识符</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#2-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E9%95%BF%E5%BA%A6"><span class="nav-text">2. 数据类型长度</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#3-%E5%AE%9A%E7%82%B9%E6%95%B0%E4%B8%8E%E6%B5%AE%E7%82%B9%E6%95%B0"><span class="nav-text">3. 定点数与浮点数</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#3-1-%E5%AE%9A%E7%82%B9%E6%95%B0"><span class="nav-text">3.1 定点数</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#3-2-%E6%B5%AE%E7%82%B9%E6%95%B0"><span class="nav-text">3.2 浮点数</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#4-%E6%95%B4%E6%95%B0"><span class="nav-text">4. 整数</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#4-1-%E5%B8%B8%E8%A7%81%E7%9A%84%E6%95%B4%E5%9E%8B"><span class="nav-text">4.1 常见的整型</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#4-2-%E6%95%B4%E5%9E%8B%E7%9A%84%E9%95%BF%E5%BA%A6"><span class="nav-text">4.2 整型的长度</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#4-3-%E6%95%B4%E5%9E%8B%E7%9A%84%E8%BE%93%E5%87%BA"><span class="nav-text">4.3 整型的输出</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#4-4-%E6%95%B4%E6%95%B0%E7%9A%84%E7%AC%A6%E5%8F%B7%EF%BC%9F"><span class="nav-text">4.4 整数的符号？</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#4-5-%E6%95%B4%E6%95%B0%E7%9A%84%E5%AD%98%E5%82%A8"><span class="nav-text">4.5 整数的存储</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#4-5-1-%E5%87%A0%E4%B8%AA%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5"><span class="nav-text">4.5.1 几个基本概念</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#4-5-2-%E5%8E%9F%E7%A0%81%E3%80%81%E5%8F%8D%E7%A0%81%E3%80%81%E8%A1%A5%E7%A0%81"><span class="nav-text">4.5.2 原码、反码、补码</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#4-5-3-%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A8%E5%8F%8D%E7%A0%81%E5%92%8C%E8%A1%A5%E7%A0%81"><span class="nav-text">4.5.3 为什么使用反码和补码</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#5-%E5%B0%8F%E6%95%B0"><span class="nav-text">5. 小数</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#5-1-%E8%A1%A8%E7%A4%BA%E5%BD%A2%E5%BC%8F"><span class="nav-text">5.1 表示形式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#5-2-%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D"><span class="nav-text">5.2 内存分配</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#5-3-%E5%AD%98%E5%82%A8%E6%96%B9%E5%BC%8F"><span class="nav-text">5.3 存储方式</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#5-3-1-%E7%AC%A6%E5%8F%B7%E7%9A%84%E5%AD%98%E5%82%A8"><span class="nav-text">5.3.1 符号的存储</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#5-3-2-%E5%B0%BE%E6%95%B0%E7%9A%84%E5%AD%98%E5%82%A8"><span class="nav-text">5.3.2 尾数的存储</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#5-3-3-%E6%8C%87%E6%95%B0%E7%9A%84%E5%AD%98%E5%82%A8"><span class="nav-text">5.3.3 指数的存储</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#5-4-%E9%AA%8C%E8%AF%81%E5%AD%98%E5%82%A8%E6%96%B9%E5%BC%8F"><span class="nav-text">5.4 验证存储方式</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#6-%E5%AD%97%E7%AC%A6"><span class="nav-text">6. 字符</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#6-1-ASCII-%E7%A0%81"><span class="nav-text">6.1 ASCII 码</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#6-2-%E5%AE%BD%E5%AD%97%E7%AC%A6%E4%B8%8E%E7%AA%84%E5%AD%97%E7%AC%A6"><span class="nav-text">6.2 宽字符与窄字符</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#6-3-%E5%AE%BD%E5%AD%97%E7%AC%A6%E7%9A%84%E5%AD%98%E5%82%A8"><span class="nav-text">6.3 宽字符的存储</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#6-4-%E5%AE%BD%E5%AD%97%E7%AC%A6%E7%9A%84%E4%BD%BF%E7%94%A8"><span class="nav-text">6.4 宽字符的使用</span></a></li></ol></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%9B%9B%E3%80%81%E6%BA%90%E6%96%87%E4%BB%B6%E7%BC%96%E7%A0%81"><span class="nav-text">四、源文件编码</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E4%BA%94%E3%80%81%E5%B8%B8%E8%A7%81%E7%BC%96%E7%A0%81%E6%96%B9%E5%BC%8F"><span class="nav-text">五、常见编码方式</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#1-ASCII-%E7%A0%81"><span class="nav-text">1. ASCII 码</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#2-ISO-8859-1"><span class="nav-text">2. ISO-8859-1 </span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#3-GB2312"><span class="nav-text">3. GB2312 </span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#4-GBK"><span class="nav-text">4. GBK  </span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#5-GB18030"><span class="nav-text">5. GB18030  </span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#6-Unicode-%E5%AD%97%E7%AC%A6%E9%9B%86"><span class="nav-text">6. Unicode 字符集</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#7-UTF-16"><span class="nav-text">7. UTF-16 </span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#8-UTF-8"><span class="nav-text">8. UTF-8 </span></a></li></ol></li></ol></div>
        </div>
        <!--/noindex-->

        <div class="site-overview-wrap sidebar-panel">
          <div class="site-author animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="苏木"
      src="/images/avatar.jpg">
  <p class="site-author-name" itemprop="name">苏木</p>
  <div class="site-description" itemprop="description">莫道桑榆晚，为霞尚满天</div>
</div>
<div class="site-state-wrap animated">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
        <a href="/archives/">
          <span class="site-state-item-count">673</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
          <a href="/categories/">
        <span class="site-state-item-count">42</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
        <span class="site-state-item-count">43</span>
        <span class="site-state-item-name">标签</span>
      </div>
  </nav>
</div>
  <div class="links-of-author animated">
      <span class="links-of-author-item">
        <a href="https://github.com/sumumm" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;sumumm" rel="noopener me" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a>
      </span>
  </div>

        </div>
      </div>
    </div>

    
  </aside>


    </div>

    <div class="main-inner post posts-expand">


  


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="https://sumumm.github.io/post/e8ba6a9c.html">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.jpg">
      <meta itemprop="name" content="苏木">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="苏木">
      <meta itemprop="description" content="莫道桑榆晚，为霞尚满天">
    </span>

    <span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
      <meta itemprop="name" content="LV01-01-C语言-数据类型 | 苏木">
      <meta itemprop="description" content="">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          LV01-01-C语言-数据类型
        </h1>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>

      <time title="创建时间：2022-01-10 16:29:55" itemprop="dateCreated datePublished" datetime="2022-01-10T16:29:55+08:00">2022-01-10</time>
    </span>
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-folder"></i>
      </span>
      <span class="post-meta-item-text">分类于</span>
        <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
          <a href="/categories/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/" itemprop="url" rel="index"><span itemprop="name">嵌入式开发</span></a>
        </span>
          ，
        <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
          <a href="/categories/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/" itemprop="url" rel="index"><span itemprop="name">01HQ课程体系</span></a>
        </span>
          ，
        <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
          <a href="/categories/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/" itemprop="url" rel="index"><span itemprop="name">LV01-C语言基础</span></a>
        </span>
    </span>

  
    <span class="post-meta-break"></span>
    <span class="post-meta-item" title="本文字数">
      <span class="post-meta-item-icon">
        <i class="far fa-file-word"></i>
      </span>
      <span class="post-meta-item-text">本文字数：</span>
      <span>10k</span>
    </span>
    <span class="post-meta-item" title="阅读时长">
      <span class="post-meta-item-icon">
        <i class="far fa-clock"></i>
      </span>
      <span class="post-meta-item-text">阅读时长 &asymp;</span>
      <span>37 分钟</span>
    </span>
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody"><p>本文主要是C语言基础——数据类型相关笔记，若笔记中有错误或者不合适的地方，欢迎批评指正😃。</p>
<span id="more"></span>

<!-- Photo: https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/LV01-01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/img/ -->

<details class="folding-tag" blue><summary> 点击查看使用工具及版本 </summary>
              <div class='content'>
              <table>    <tr>        <td align="center" width=150px>Windows</td>        <td align="left">windows11</td>    </tr>    <tr>        <td align="center">Ubuntu</td>        <td align="left">Ubuntu16.04的64位版本</td>      </tr>    <tr>        <td align="center">VMware® Workstation 16 Pro</td>        <td align="left">16.2.3 build-19376536</td>      </tr>    <tr>        <td align="center">SecureCRT</td>        <td align="left">Version 8.7.2 (x64 build 2214)   -   正式版-2020年5月14日</td>      </tr>    <tr>        <td align="center">开发板</td>        <td align="left">正点原子 i.MX6ULL Linux阿尔法开发板</td>      </tr>    <tr>        <td align="center">uboot</td>        <td align="left">NXP官方提供的uboot，NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)</td>      </tr>    <tr>        <td align="center">linux内核</td>        <td align="left">linux-4.15(NXP官方提供)</td>      </tr>    <tr>        <td align="center">STM32开发板</td>        <td align="left">正点原子战舰V3(STM32F103ZET6)</td>      </tr></table>
              </div>
            </details>

<details class="folding-tag" blue><summary> 点击查看本文参考资料 </summary>
              <div class='content'>
              <table>    <tr><td align="center">参考方向  </td><td align="center">参考原文</td></tr>    <tr><td align="left">---</td><td align="left"><a href="" target="_blank">--- <i class="fa fa-external-link-alt"></i> </a></td></tr></table>
              </div>
            </details>

<details class="folding-tag" blue><summary> 点击查看相关文件下载 </summary>
              <div class='content'>
              <table>    <tr>        <td align="center">---</td>        <td align="left">--- <a href="" target="_blank">  <i class="fa fa-external-link-alt"></i></a></td>      </tr></table>
              </div>
            </details>

<h1 id="一、数据的形式"><a href="#一、数据的形式" class="headerlink" title="一、数据的形式"></a><font size=3>一、数据的形式</font></h1><p>计算机要处理大量的信息，如数字、文字、符号、图形、音频、视频等，这些信息对于计算机来说，都是一样的，都是以二进制的形式来表示。</p>
<p>内存条是一个非常精密的部件，包含了上亿个电子元器件。这些元器件，实际上就是数字电路；数字电路的电压会变化，但是却只有两种状态要么是高电平（如 5.0V 、 3.3V 等），要么是低电平（如 0V ）。 1 代表高电平， 0 代表低电平，这样就得到了元器件的两种状态。元器件组合在一起的时候，便产生许多不同的组合。例如， 8 个元器件有  256(2的8次方)  种不同的组合， 16 个元器件有  65536(2的16次方)  种不同的组合。</p>
<p> 1 个元器件称为 1 比特（ Bit ）或 1 位， 8 个元器件称为 1 字节（ Byte ）</p>
<details class="folding-tag" blue><summary> 点击查看计算机内存单位换算 </summary>
              <div class='content'>
              <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1B</span>yte = <span class="number">8</span> Bit</span><br><span class="line"><span class="number">1</span>KB = <span class="number">1024B</span>yte</span><br><span class="line"><span class="number">1</span>MB = <span class="number">1024</span>KB</span><br><span class="line"><span class="number">1</span>GB = <span class="number">1024</span>MB</span><br><span class="line"><span class="number">1</span>TB = <span class="number">1024</span>GB</span><br><span class="line"><span class="number">1</span>PB = <span class="number">1024</span>TB</span><br><span class="line"><span class="number">1</span>EB = <span class="number">1024</span>PB</span><br></pre></td></tr></table></figure>
              </div>
            </details>

<p>计算机只认识 0 和 1 两个数字，所以一切东西在计算机内部都会转化为 0 和 1 的组合。但是我们写程序不可能使用 0 和 1 来写吧，后来出现了汇编， C 语言等等很多的编程语言。这样我们才能很方便的与计算机进行”交流”。</p>
<h1 id="二、数据表示"><a href="#二、数据表示" class="headerlink" title="二、数据表示"></a><font size=3>二、数据表示</font></h1><h2 id="1-数值数据"><a href="#1-数值数据" class="headerlink" title="1. 数值数据"></a><font size=3>1. 数值数据</font></h2><p>数值型的数据在内存中最终都是以二进制的形式表示的，后边会有详细说明。</p>
<table>
    <tr>
        <td align="center">十进制</td>
        <td align="center">二进制</td>
        <td align="center">八进制</td>
        <td align="center">十六进制</td>
    </tr>
    <tr>
        <td align="center">0</td>
        <td align="center">0000</td>
        <td align="center">0</td>
        <td align="center">0</td>
    </tr>
    <tr>
        <td align="center">1</td>
        <td align="center">0001</td>
        <td align="center">1</td>
        <td align="center">1</td></tr>
    <tr>
        <td align="center">2</td>
        <td align="center">0010</td>
        <td align="center">2</td>
        <td align="center">2</td>
    </tr>
    <tr>
        <td align="center">3</td>
        <td align="center">0011</td>
        <td align="center">3</td>
        <td align="center">3</td>
    </tr>
    <tr>
        <td align="center">4</td>
        <td align="center">0100</td>
        <td align="center">4</td>
        <td align="center">4</td>
    </tr>
    <tr>
        <td align="center">5</td>
        <td align="center">0101</td>
        <td align="center">5</td>
        <td align="center">5</td>
    </tr>
    <tr>
        <td align="center">6</td>
        <td align="center">0110</td>
        <td align="center">6</td>
        <td align="center">6</td>
    </tr>
    <tr>
        <td align="center">7</td>
        <td align="center">0111</td>
        <td align="center">7</td>
        <td align="center">7</td>
    </tr>
    <tr>
        <td align="center">8</td>
        <td align="center">1000</td>
        <td align="center">10</td>
        <td align="center">8</td>
    </tr>
    <tr>
        <td align="center">9</td>
        <td align="center">1001</td>
        <td align="center">11</td>
        <td align="center">9</td>
    </tr>
    <tr>
        <td align="center">10</td>
        <td align="center">1010</td>
        <td align="center">12</td>
    </td><td align="center">a</td>
</tr>
    <tr>
        <td align="center">11</td>
        <td align="center">1011</td>
        <td align="center">13</td>
        <td align="center">b</td>
    </tr>
    <tr>
        <td align="center">12</td>
        <td align="center">1100</td>
        <td align="center">14</td>
        <td align="center">c</td>
    </tr>
    <tr>
        <td align="center">13</td>
        <td align="center">1101</td>
        <td align="center">15</td>
        <td align="center">d</td>
    </tr>
    <tr>
        <td align="center">14</td>
        <td align="center">1110</td>
        <td align="center">16</td>
        <td align="center">e</td>
    </tr>
    <tr>
        <td align="center">15</td>
        <td align="center">1111</td>
        <td align="center">17</td>
        <td align="center">f</td>
    </tr>
</table>


<h2 id="2-非数值数据-ASCII"><a href="#2-非数值数据-ASCII" class="headerlink" title="2. 非数值数据( ASCII )"></a><font size=3>2. 非数值数据( ASCII )</font></h2><p>非数值型的数据，部分会转换为 ASCII 码来存储，后边会有详细说明。</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/LV01-01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/img/1641269764160.png" alt="1641269764160" style="zoom: 50%;" />

<h1 id="二、数据类型"><a href="#二、数据类型" class="headerlink" title="二、数据类型"></a><font size=3>二、数据类型</font></h1><h2 id="1-数据类型及标识符"><a href="#1-数据类型及标识符" class="headerlink" title="1. 数据类型及标识符"></a><font size=3>1. 数据类型及标识符</font></h2><table>
    <tr>
        <td align="center">分类</td>
        <td align="center">数据类型</td>
        <td align="center">标识符</td>
    </tr>
    <tr>
        <td align="center" rowspan="8">基本类型</td>
        <td align="center" rowspan=4>整型</td>
        <td align="left">int(基本整形)</td>
    </tr>
    <tr>
        <td align="left">long(长整型)</td>
    </tr>
    <tr>
        <td align="left">short(短整型)</td>
    </tr>
    <tr>
        <td align="left">unsigned(无符号整型)</td>
    </tr>
    <tr>
        <td align="center">字符型</td>
        <td align="left">char</td>
    </tr>
    <tr>
        <td align="center" rowspan="2">浮点型</td>
        <td align="left">float(单精度)</td>
    </tr>
    <tr>
        <td align="left">double(双精度)</td>
    </tr>
    <tr>
        <td align="center">枚举型</td>
        <td align="left">enum</td>
    </tr>
    <tr>
        <td align="center" rowspan="3">构造类型</td>
        <td align="center">结构体类型</td>
        <td align="left">struct</td>
    </tr>
    <tr>
        <td align="center">共用体类型</td>
        <td align="left">union</td>
    </tr>
    <tr>
        <td align="center">数组</td>
        <td align="left">基本类型和构造类型组成数组</td>
    </tr>
    <tr>
        <td align="center" >空类型</td>
        <td align="center">空类型</td>
        <td align="left">void</td>
    </tr>
    <tr>
        <td align="center" >指针类型</td>
        <td align="center">指针类型</td>
        <td align="left">*</td>
    </tr>
</table>



<h2 id="2-数据类型长度"><a href="#2-数据类型长度" class="headerlink" title="2. 数据类型长度"></a><font size=3>2. 数据类型长度</font></h2><p>一种数据类型占用的字节数，称为该数据类型的<strong>长度</strong>。例如， short  占用  2  个字节的内存，那么它的长度就是  2 。</p>
<table>
    <tr><!-- 第1行 -->
        <td align="center" rowspan="2">常用数据类型</td> <!-- 第1列 -->
        <td align="center" colspan="2">16位平台</td><!-- 第2列 -->
                                                <!-- 第3列 -->
        <td align="center" colspan="2">32位平台</td><!-- 第4列 -->
                                                <!-- 第5列 -->
        <td align="center" colspan="2">64位平台</td><!-- 第6列 -->
                                                <!-- 第7列 -->
    </tr>
    <tr><!-- 第2行 -->
                                               <!-- 第1列 -->
        <td align="center">字节数</td><!-- 第2列 -->
        <td align="center">位数</td><!-- 第3列 -->
        <td align="center">字节数</td><!-- 第4列 -->
        <td align="center">位数</td><!-- 第5列 -->
        <td align="center">字节数</td><!-- 第6列 -->
        <td align="center">位数</td><!-- 第7列 -->
    </tr>
    <tr> <!-- 第3行 -->
        <td align="center">char<br>unsigned char</td><!-- 第1列 -->
        <td align="center">1</td><!-- 第2列 -->
        <td align="center">8</td><!-- 第3列 -->
        <td align="center">1</td><!-- 第4列 -->
        <td align="center">8</td><!-- 第5列 -->
        <td align="center">1</td><!-- 第6列 -->
        <td align="center">8</td><!-- 第7列 -->
    </tr>
    <tr> <!-- 第4行 -->
        <td align="center">short<br>unsigned short</td><!-- 第1列 -->
        <td align="center">2</td><!-- 第2列 -->
        <td align="center">16</td><!-- 第3列 -->
        <td align="center">2</td><!-- 第4列 -->
        <td align="center">16</td><!-- 第5列 -->
        <td align="center">2</td><!-- 第6列 -->
        <td align="center">16</td><!-- 第7列 -->
    </tr>
    <tr> <!-- 第5行 -->
        <td align="center">int<br>unsigned int</td><!-- 第1列 -->
        <td align="center">2</td><!-- 第2列 -->
        <td align="center">16</td><!-- 第3列 -->
        <td align="center">4</td><!-- 第4列 -->
        <td align="center">32</td><!-- 第5列 -->
        <td align="center">4</td><!-- 第6列 -->
        <td align="center">32</td><!-- 第7列 -->
    </tr>
    <tr> <!-- 第6行 -->
        <td align="center">long<br>unsigned long</td><!-- 第1列 -->
        <td align="center">4</td><!-- 第2列 -->
        <td align="center">32</td><!-- 第3列 -->
        <td align="center" style="font-weight: bold">4</td><!-- 第4列 -->
        <td align="center" style="font-weight: bold">32</td><!-- 第5列 -->
        <td align="center" style="font-weight: bold; color: red">8</td><!-- 第6列 -->
        <td align="center" style="font-weight: bold; color: red">64</td><!-- 第7列 -->
    </tr>
    <tr> <!-- 第7行 -->
        <td align="center">long long</td><!-- 第1列 -->
        <td align="center">---</td><!-- 第2列 -->
        <td align="center">---</td><!-- 第3列 -->
        <td align="center">8</td><!-- 第4列 -->
        <td align="center">64</td><!-- 第5列 -->
        <td align="center">8</td><!-- 第6列 -->
        <td align="center">64</td><!-- 第7列 -->
    </tr>
    <tr> <!-- 第8行 -->
        <td align="center">指针</td><!-- 第1列 -->
        <td align="center">2</td><!-- 第2列 -->
        <td align="center">16</td><!-- 第3列 -->
        <td align="center" style="font-weight: bold">4</td><!-- 第4列 -->
        <td align="center" style="font-weight: bold">32</td><!-- 第5列 -->
        <td align="center" style="font-weight: bold; color: red">8</td><!-- 第6列 -->
        <td align="center" style="font-weight: bold; color: red">64</td><!-- 第7列 -->
    </tr>
    <tr> <!-- 第9行 -->
        <td align="center">bool</td><!-- 第1列 -->
        <td align="center">1</td><!-- 第2列 -->
        <td align="center">8</td><!-- 第3列 -->
        <td align="center">1</td><!-- 第4列 -->
        <td align="center">8</td><!-- 第5列 -->
        <td align="center">1</td><!-- 第6列 -->
        <td align="center">8</td><!-- 第7列 -->
    </tr>
    <tr> <!-- 第9行 -->
        <td align="center">float</td><!-- 第1列 -->
        <td align="center">4</td><!-- 第2列 -->
        <td align="center">32</td><!-- 第3列 -->
        <td align="center">4</td><!-- 第4列 -->
        <td align="center">32</td><!-- 第5列 -->
        <td align="center">4</td><!-- 第6列 -->
        <td align="center">32</td><!-- 第7列 -->
    </tr>
    <tr> <!-- 第10行 -->
        <td align="center">double</td><!-- 第1列 -->
        <td align="center">8</td><!-- 第2列 -->
        <td align="center">64</td><!-- 第3列 -->
        <td align="center">8</td><!-- 第4列 -->
        <td align="center">64</td><!-- 第5列 -->
        <td align="center">8</td><!-- 第6列 -->
        <td align="center">64</td><!-- 第7列 -->
    </tr>
</table>

<h2 id="3-定点数与浮点数"><a href="#3-定点数与浮点数" class="headerlink" title="3. 定点数与浮点数"></a><font size=3>3. 定点数与浮点数</font></h2><h3 id="3-1-定点数"><a href="#3-1-定点数" class="headerlink" title="3.1 定点数"></a><font size=3>3.1 定点数</font></h3><p>数字既包括整数，又包括小数，而小数的精度范围要比整数大得多，所以如果我们想在计算机中，既能表示整数，也能表示小数，关键就在于这个小数点。</p>
<p>于是人们便与计算机约定小数点的位置，且这个位置固定不变。小数点前、后的数字，分别用二进制表示，然后组合起来就可以把这个数字在计算机中存储起来。用这种方法表示的数字叫做<strong>定点数</strong>。</p>
<p>定点数如果要表示整数或小数，分为以下三种情况：</p>
<table>
    <tr><td align="center" width=130px>纯整数</td><td align="left">例如：100，小数点其实在最后一位，所以忽略不写</td></tr>
    <tr><td align="center" width=130px>纯小数</td><td align="left">例如：0.125，小数点固定在最高位</td></tr>
    <tr><td align="center" width=130px>整数+小数 </td><td align="left">例如：1.28、32.35，小数点在指定某个位置</td></tr>
</table>


<details class="folding-tag" blue><summary> 点击查看实例 </summary>
              <div class='content'>
              <ul><li>纯整数</li></ul><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* 以 1 个字节（8 bit）表示 */</span></span><br><span class="line"><span class="number">100</span>(D) = <span class="number">0110</span> <span class="number">0100</span>(B)</span><br></pre></td></tr></table></figure><ul><li>纯小数</li></ul><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* 以 1 个字节（8 bit）表示 */</span></span><br><span class="line"><span class="number">0.125</span>(D) = <span class="number">0.0010</span> <span class="number">0000</span>(B)</span><br><span class="line">    </span><br><span class="line"><span class="comment">/* ==============================    </span></span><br><span class="line"><span class="comment">0.125 x 2 = 0.250 ----- 取0剩0.250</span></span><br><span class="line"><span class="comment">0.250 x 2 = 0.500 ----- 取0剩0.500</span></span><br><span class="line"><span class="comment">0.500 x 2 = 1.000 ----- 取1剩0.000</span></span><br><span class="line"><span class="comment">0.000 x 2 = 0.000 ----- 取0剩0.000</span></span><br><span class="line"><span class="comment">    </span></span><br><span class="line"><span class="comment">0.000 x 2 = 0.000 ----- 取0剩0.000</span></span><br><span class="line"><span class="comment">0.000 x 2 = 0.000 ----- 取0剩0.000</span></span><br><span class="line"><span class="comment">0.000 x 2 = 0.000 ----- 取0剩0.000</span></span><br><span class="line"><span class="comment">所以最后就是 0.0010 0000</span></span><br><span class="line"><span class="comment"> * ============================== */</span></span><br></pre></td></tr></table></figure><p>【说明】小数转二进制方法：乘 2 取整，一直乘到要求的位数。</p><ul><li>整数+小数</li></ul><p>我们需要先约定小数点的位置。依旧以  1  个字节（ 8 bit ）为例，我们可以约定前  5  位表示整数部分，后  3  位表示小数部分。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* 以 1 个字节（8 bit）表示 */</span></span><br><span class="line"><span class="comment">/* 前5位表示整数部分，后3位表示小数部分 */</span></span><br><span class="line"><span class="number">25.125</span>(D) = <span class="number">11001</span> <span class="number">001</span>(B)</span><br></pre></td></tr></table></figure>
              </div>
            </details>

<p>用定点格式来存储小数，优点是精度高，因为所有的位都可以用来存储有效数字。缺点是取值范围太小，不能表示很大或者很小的数。</p>
<h3 id="3-2-浮点数"><a href="#3-2-浮点数" class="headerlink" title="3.2 浮点数"></a><font size=3>3.2 浮点数</font></h3><p>在实际问题中，有很多数据的数量级特别大，小数的取值范围很大，最大值和最小值的差距有上百个数量级，使用定点数来存储将变得非常困难。例如，</p>
<p>$$<br>2000000000000000000000000000000000 g &#x3D; 2 × 10^{33} g<br>$$<br>这用科学计数法很容易表示，但是计算机中怎么办，没有这么大的数据类型吧。如果真要存，那将会需要很大的一块内存，估计要几十个字节。那计算机不能也学习一下科学计数法吗🤣？用指数来存储不好吗？</p>
<p>于是，这种以指数的形式来存储小数的解决方案就叫做浮点数。浮点数克服了定点数取值范围太小的缺点。</p>
<h2 id="4-整数"><a href="#4-整数" class="headerlink" title="4. 整数"></a><font size=3>4. 整数</font></h2><p> C 语言使用定点数格式来存储  short 、 int 、 long  类型的整数，定点数中的点指的就是小数点。对于整数，可以认为小数点后面都是零。</p>
<h3 id="4-1-常见的整型"><a href="#4-1-常见的整型" class="headerlink" title="4.1 常见的整型"></a><font size=3>4.1 常见的整型</font></h3><p>现在的操作系统中， int  <strong>一般</strong>占用  4  个字节（ Byte ）的内存，共计  32  位（ Bit ）。使用  4  个字节保存较小的整数绰绰有余，我们正常使用的时候，一般会空闲出两三个字节来，这些字节就白白浪费掉了，不能再被其他数据使用。在单片机和嵌入式系统中，内存都是非常稀缺的资源，所有的程序都在尽力节省内存。</p>
<p>让整数占用更少的内存可以在  int  前边加  short ，让整数占用更多的内存可以在  int  前边加  long 。 short 、 int 、 long  是 C 语言中常见的整数类型，其中  int  称为整型， short  称为短整型， long  称为长整型。</p>
<h3 id="4-2-整型的长度"><a href="#4-2-整型的长度" class="headerlink" title="4.2 整型的长度"></a><font size=3>4.2 整型的长度</font></h3><p>对于上边说三种整型来说，只有  short  的长度是确定的，是两个字节，而  int  和  long  的长度无法确定，在不同的环境下可能会有所不同。C语言并没有严格规定  short 、 int 、 long  的长度，只做了宽泛的限制：</p>
<ul>
<li><p>（1）short 至少占用2个字节。</p>
</li>
<li><p>（2）short 的长度不能大于 int。</p>
</li>
<li><p>（3）long 的长度不能小于 int。</p>
</li>
</ul>
<p>总的来说，它们的长度(所占字节数)关系为：short &lt;&#x3D; int &lt;&#x3D; long。这说明 short 并不一定真的” 短 “，long也并不一定真的” 长 “，它们有可能和 int 占用相同的字节数。</p>
<p>在16位环境下，short为2个字节，int为2个字节，long为4个字节。对于32位的Windows、Linux和OSX，short为2个字节，int为4个字节，long也为4个字节。在64位环境下，不同的操作系统会有不同的结果，具体如下所示(长度以字节计)：Windows 64位系统： short为2字节、 int为4字节， long 为4字节。类Unix系统(包括Unix、Linux、OSX、BSD、Solaris等)： short为2字节、 int为4字节， long为8字节。</p>
<h3 id="4-3-整型的输出"><a href="#4-3-整型的输出" class="headerlink" title="4.3 整型的输出"></a><font size=3>4.3 整型的输出</font></h3><p>后边我们会接触到 printf 函数来输出一些数据，对于整数来说，常用的格式控制符如下：</p>
<table>
    <tr><td align="center" width=100px>%hd</td><td align="left">输出 short int 类型，hd 是 short decimal 的简写；</td></tr>
    <tr><td align="center" width=100px>%d</td><td align="left">输出 int 类型，d 是 decimal 的简写；</td></tr>
    <tr><td align="center" width=100px>%ld</td><td align="left">输出 long int 类型，ld 是 long decimal 的简写。</td></tr>
</table>


<h3 id="4-4-整数的符号？"><a href="#4-4-整数的符号？" class="headerlink" title="4.4 整数的符号？"></a><font size=3>4.4 整数的符号？</font></h3><p>整数，自然会有正负之分，那正负怎么界定呢？C 语言规定，把内存的最高位作为符号位。以  int  为例，它占用  32  位的内存， 0~30  位表示数值， 31  位表示正负号。最高位是 1 表示为负数，最高位是 0 表示为正数。</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/LV01-01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/img/image-20220330170351148.png" alt="image-20220330170351148" style="zoom: 33%;" />

<p> short 、 int  和  long  类型默认都是带符号位的，符号位以外的内存才是数值位。如果只考虑正数，那么各种类型能表示的数值范围（取值范围）就比原来小了一半。</p>
<p>但是我们很多时候可以确定某个数字只能是正数，比如，人数、字符串的长度、内存地址等，这个时候符号位就是多余的了，那我们就可以删掉符号位，把所有的位都用来存储数值，这样能表示的数值范围更大（大一倍）。 C 语言中通过 unsigned  表示没有符号位，于是就出现了 unsigned short 、 unsigned int 、 unsigned long 。</p>
<h3 id="4-5-整数的存储"><a href="#4-5-整数的存储" class="headerlink" title="4.5 整数的存储"></a><font size=3>4.5 整数的存储</font></h3><p>对于有符号数，都是以<strong>补码</strong>的形式存于内存中。那什么是补码，为什么要用补码呢？</p>
<h4 id="4-5-1-几个基本概念"><a href="#4-5-1-几个基本概念" class="headerlink" title="4.5.1 几个基本概念"></a><font size=3>4.5.1 几个基本概念</font></h4><ul>
<li>机器数</li>
</ul>
<p>机器数就是一个数在计算机中的二进制表示，计算机中机器数的最高位是符号位，正数符号位为 0 ，负数符号位为 1 。机器数包含原码、反码和补码三种表示形式。如：数字 3 若用 8 位二进制数表示，则机器数为 0000 0011 ，数字 -3 若用 8 位二进制数表示，则机器数为 1000 0011 。</p>
<ul>
<li>机器数的真值</li>
</ul>
<p>真值就是带符号位的机器数对应的真正数值。如：机器数为 0000 0011 则，真值为 3 ，机器数为 1000 0011 ，则真值为 -3 。</p>
<h4 id="4-5-2-原码、反码、补码"><a href="#4-5-2-原码、反码、补码" class="headerlink" title="4.5.2 原码、反码、补码"></a><font size=3>4.5.2 原码、反码、补码</font></h4><ul>
<li>原码</li>
</ul>
<p>若机器字长为 n ，那么一个数的原码就是用一个 n 位的二进制数表示出来的机器数，其中最高位为符号位：正数为 0 ，负数为 1 ，位数不够的用 0 补全。其实就是 原码 &#x3D; 符号位(0或1) + 真值的绝对值 。如（假设机器字长为 8 ）： 3 的原码为 0000 0011 ， -3 的原码为 1000 0011 。</p>
<p>【注意】 0 的原码有两个： [+0] 原码为 0000 0000 ； [-0] 原码为 1000 0000 。</p>
<ul>
<li>反码</li>
</ul>
<p>正数的反码就是其<strong>本身</strong>，负数的反码为除了<strong>符号位不变</strong>外，<strong>其他各位取反</strong>。如（假设机器字长为 8 ）： 3 的反码为 0000 0011 ， -3 的反码为 1111 1100 。</p>
<p>【注意】 0 的反码有两个： [+0] 反码为 0000 0000 ； [-0] 反码为 1111 1111 。</p>
<ul>
<li>补码</li>
</ul>
<p>正数的补码就是其<strong>本身</strong>，负数的补码则是<strong>反码加一</strong>。如（假设机器字长为 8 ）： 3 的补码为 0000 0011 ， -3 的补码为 1111 1101 。</p>
<p>【注意】：</p>
<p>（1）0 的补码只有一个： [0] 补码为 0000 0000 。</p>
<p>（2）在8 位数据长度下 -128 ，没有原码和反码，补码为 10000000 。</p>
<h4 id="4-5-3-为什么使用反码和补码"><a href="#4-5-3-为什么使用反码和补码" class="headerlink" title="4.5.3 为什么使用反码和补码"></a><font size=3>4.5.3 为什么使用反码和补码</font></h4><p>在使用原码进行计算的时候，对于人来说，可以轻易识别符号位，轻松知道正负，然后再对其他位来进行计算，对于计算机的设计来说，识别符号位就是一项复杂的工程了，若是能让符号位直接参与计算，那么这样就可以忽略符号位的识别了。</p>
<p>对于加法来说，符号位有没有影响不大，但是对于减法来说，计算机是将其转换为加法来进行运算，所以若是通过原码来进行计算（符号位直接参与计算）则：</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">5</span> - <span class="number">3</span> = <span class="number">2</span></span><br><span class="line">      = <span class="number">5</span> + (<span class="number">-3</span>)</span><br><span class="line">      = <span class="number">0000</span> <span class="number">0101</span>(原码) + <span class="number">1000</span> <span class="number">0011</span>(原码)</span><br><span class="line">      = <span class="number">1000</span> <span class="number">1000</span>(原码)</span><br><span class="line">      = <span class="number">-8</span></span><br></pre></td></tr></table></figure>

<p>显然，计算结果理论上为 2 ，但是计算机按照原码计算出来的数值为 -8 ，所以对减法来说，原码计算的方式不行，于是引入反码，若通过反码进行减法计算，则有：</p>
<figure class="highlight v"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">5</span>-<span class="number">3</span> = <span class="number">2</span></span><br><span class="line">    = <span class="number">5</span> + （-<span class="number">3</span>）</span><br><span class="line">    = <span class="number">0000</span> <span class="number">0101</span>（原码） + <span class="number">1000</span> <span class="number">0011</span>（原码）</span><br><span class="line">    = <span class="number">0000</span> <span class="number">0101</span>（反码） + <span class="number">1111</span> <span class="number">1100</span>（反码）</span><br><span class="line">    = <span class="number">1</span> <span class="number">0000</span> <span class="number">0001</span>（反码）</span><br><span class="line">    = <span class="number">0000</span> <span class="number">0001</span>（反码） + <span class="number">0000</span> <span class="number">0001</span>（高位进位，结果要加<span class="number">1</span>）</span><br><span class="line">    = <span class="number">0000</span> <span class="number">0010</span>（反码，符号位为<span class="number">0</span>，为正数）</span><br><span class="line">    = <span class="number">0000</span> <span class="number">0010</span>（原码）</span><br><span class="line">    = <span class="number">2</span></span><br></pre></td></tr></table></figure>

<p>【注意】反码计算的运算规则：从低到高位逐列进行计算。 0+0&#x3D;0,0+1&#x3D;1,1+1&#x3D;0(向高位进1) 。若最高位产生了进位，则最后得到的结果要<strong>加1</strong>。</p>
<p>但是，有一个问题出现了对于相同两个数相减，如：</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1</span> - <span class="number">1</span> = <span class="number">0</span></span><br><span class="line">      = <span class="number">1</span> + (<span class="number">-1</span>) </span><br><span class="line">      = <span class="number">0000</span> <span class="number">0001</span>(原码) + <span class="number">1000</span> <span class="number">0001</span>(原码) </span><br><span class="line">      = <span class="number">0000</span> <span class="number">0001</span>(反码) + <span class="number">1111</span> <span class="number">1110</span></span><br><span class="line">      = <span class="number">1111</span> <span class="number">1111</span>(反码)</span><br><span class="line">      = <span class="number">1000</span> <span class="number">0000</span>(原码)</span><br><span class="line">      = <span class="number">-0</span></span><br></pre></td></tr></table></figure>

<p>显然，计算出的结果的真值是对的，但是结果却是 -0 ，通过上边已经知道 0 的原码和反码都有2个，所以，用反码进行计算时遇上了 0 ，这样的结果就是不合理的了，于是，又引入了补码，则：</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1</span> - <span class="number">1</span> = <span class="number">0</span></span><br><span class="line">      = <span class="number">1</span> + (<span class="number">-1</span>)</span><br><span class="line">      = <span class="number">0000</span> <span class="number">0001</span>(原码) + <span class="number">1000</span> <span class="number">0001</span>(原码)</span><br><span class="line">      = <span class="number">0000</span> <span class="number">0001</span>(反码) + <span class="number">1111</span> <span class="number">1110</span>(反码)</span><br><span class="line">      = <span class="number">0000</span> <span class="number">0001</span>(补码) + <span class="number">1111</span> <span class="number">1111</span>(补码)</span><br><span class="line">      = <span class="number">1</span> <span class="number">0000</span> <span class="number">0000</span>(补码)</span><br><span class="line">      = <span class="number">0000</span> <span class="number">0000</span>(补码，最高位进位，舍去进位)</span><br><span class="line">      = <span class="number">0000</span> <span class="number">0000</span>(最高位为<span class="number">0</span>，是正数)</span><br><span class="line">      = <span class="number">0</span></span><br></pre></td></tr></table></figure>

<p>这样计算结果就没得问题了。</p>
<p>【注意】补码计算时，若最高位产生进位，则舍去进位，注意与反码相区别。</p>
<h2 id="5-小数"><a href="#5-小数" class="headerlink" title="5. 小数"></a><font size=3>5. 小数</font></h2><p>整数是以定点数的形式存储，那么小数呢？</p>
<h3 id="5-1-表示形式"><a href="#5-1-表示形式" class="headerlink" title="5.1 表示形式"></a><font size=3>5.1 表示形式</font></h3><p>小数在内存中是以<strong>浮点数</strong>的形式存储的。使用浮点数格式来存储  float 、 double  类型的小数。C 语言标准规定，小数在内存中转换为科学计数法的形式，然后进行存储，具体形式为：</p>
<p>$$<br>flt &#x3D; (-1)^{sign} × mantissa × base^{exponent}<br>$$</p>
<table>
    <tr><td align="center" width=100px>flt</td><td align="left">要表示的小数。</td></tr>
<tr><td align="center" width=100px>sign</td><td align="left">表示 flt 的正负号，它的取值只能是 0 或 1：取值为 0 表示 flt 是正数，取值为 1 表示 flt 是负数。</td></tr>
    <tr><td align="center" width=100px>base</td><td align="left">基数，或者说进制，它的取值大于等于 2（例如，2 表示二进制、10 表示十进制、16 表示十六进制……）。数学中常见的科学计数法是基于十进制的，例如 6.93 × 10<sup>13</sup>；计算机中的科学计数法可以基于其它进制，例如 1.001 × 2<sup>7</sup> 就是基于二进制的，它等价于 1001 0000。</td></tr>
    <tr><td align="center" width=100px>mantissa</td><td align="left">尾数，或者说精度，是 base 进制的小数，并且 1 &le; mantissa &lt; base，这意味着，小数点前面只能有一位数字；</td></tr>
    <tr><td align="center" width=100px>exponent</td><td align="left">指数，是一个整数，可正可负，并且为了直观一般采用十进制表示。</td></tr>
</table>

<details class="folding-tag" blue><summary> 点击查看实例 </summary>
              <div class='content'>
              <p>以 19.625 为例，我们现在就将小数转换为浮点格式。</p><ul><li>base &#x3D; 10</li></ul><p>根据上边的表格，可以知道：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">sign = <span class="number">0</span></span><br><span class="line">mantissa = <span class="number">1.9625</span></span><br><span class="line">base = <span class="number">10</span></span><br><span class="line">exponent = <span class="number">1</span></span><br></pre></td></tr></table></figure><p>所以有：<br>$$<br>19.625 &#x3D; 1.9625 × 10^1<br>$$</p><ul><li>base &#x3D; 2</li></ul><p>先将 19.625 转换为二进制表示的形式 1 0011.101 。</p><details class="folding-tag" blue><summary> 点击查看转换说明 </summary>              <div class='content'>              <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* 整数部分 19 */</span></span><br><span class="line"><span class="number">19</span> / <span class="number">2</span> = <span class="number">9</span> ... <span class="number">1</span> ----- 取 <span class="number">1</span> 剩 <span class="number">9</span></span><br><span class="line"><span class="number">9</span> / <span class="number">2</span> = <span class="number">4</span> ... <span class="number">1</span>  ----- 取 <span class="number">1</span> 剩 <span class="number">4</span></span><br><span class="line"><span class="number">4</span> / <span class="number">2</span> = <span class="number">2</span> ... <span class="number">0</span>  ----- 取 <span class="number">0</span> 剩 <span class="number">2</span></span><br><span class="line"><span class="number">2</span> / <span class="number">2</span> = <span class="number">1</span> ... <span class="number">0</span>  ----- 取 <span class="number">0</span> 剩 <span class="number">1</span></span><br><span class="line"><span class="number">1</span> / <span class="number">2</span> = <span class="number">0</span> ... <span class="number">1</span>  ----- 取 <span class="number">1</span></span><br><span class="line">所以<span class="number">19</span>(D) = <span class="number">10011</span>(B)</span><br><span class="line"><span class="comment">/* 小数部分 0.625 */</span></span><br><span class="line"><span class="number">0.625</span> x <span class="number">2</span> = <span class="number">1.250</span> ----- 取 <span class="number">1</span> 剩 <span class="number">0.250</span></span><br><span class="line"><span class="number">0.250</span> x <span class="number">2</span> = <span class="number">0.500</span> ----- 取 <span class="number">0</span> 剩 <span class="number">0.500</span></span><br><span class="line"><span class="number">0</span>,<span class="number">500</span> x <span class="number">2</span> = <span class="number">1.000</span> ----- 取 <span class="number">1</span> 剩 <span class="number">0.000</span></span><br><span class="line">所以<span class="number">0.625</span>(D) = <span class="number">101</span>(B)</span><br><span class="line"></span><br><span class="line">故 <span class="number">19.625</span>(D) = <span class="number">1</span> <span class="number">0011.101</span>(B)</span><br></pre></td></tr></table></figure>              </div>            </details><p>有以下形式：<br>$$<br>19.625 &#x3D; 1×2^4 + 0×2^3 + 0×2^2 + 1×2^1 + 1×2^0 + 1×2^{-1} + 0×2^{-2} + 1×2^{-3}<br>$$<br>根据上边的表格，可以知道：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">19.625</span> = <span class="number">1</span> <span class="number">0011.101</span></span><br><span class="line">sign = <span class="number">0</span></span><br><span class="line">mantissa = <span class="number">1.0011101</span></span><br><span class="line">base = <span class="number">2</span></span><br><span class="line">exponent = <span class="number">4</span></span><br></pre></td></tr></table></figure><p>所以有：<br>$$<br>19.625 &#x3D; 1 0011.101 &#x3D;1.0011101 × 2^4<br>$$</p>
              </div>
            </details>

<p>【说明】当基数（进制） base  确定以后，指数  exponent  实际上就是小数点的移动位数：</p>
<ul>
<li>exponent  大于零， mantissa  中的小数点右移  exponent  位即可还原小数的值；</li>
<li>exponent  小于零， mantissa  中的小数点左移  exponent  位即可还原小数的值。</li>
</ul>
<h3 id="5-2-内存分配"><a href="#5-2-内存分配" class="headerlink" title="5.2 内存分配"></a><font size=3>5.2 内存分配</font></h3><p>C 语言中常用的浮点数类型为  float  和  double 。其中 float  始终占用  4  个字节， double  始终占用  8  个字节。浮点数存储时的内存被分成三部分，分别用来存储符号  sign 、尾数  mantissa  和指数  exponent  ，当浮点数的类型确定后，每一部分的位数就是固定的。</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/LV01-01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/img/image-20220331190334664.png" alt="image-20220331190334664" style="zoom: 50%;" />

<h3 id="5-3-存储方式"><a href="#5-3-存储方式" class="headerlink" title="5.3 存储方式"></a><font size=3>5.3 存储方式</font></h3><p>在计算及内部，小数也会被转化为二进制，那么二进制的浮点数是如何存储的呢？</p>
<h4 id="5-3-1-符号的存储"><a href="#5-3-1-符号的存储" class="headerlink" title="5.3.1 符号的存储"></a><font size=3>5.3.1 符号的存储</font></h4><p>符号的存储与整数类似，单独分配出一个位（ Bit ）来，用  0  表示正数，用  1  表示负数。</p>
<h4 id="5-3-2-尾数的存储"><a href="#5-3-2-尾数的存储" class="headerlink" title="5.3.2 尾数的存储"></a><font size=3>5.3.2 尾数的存储</font></h4><p>还是以 19.625 为例，我们上边已经知道了转换后的尾数部分为 1.0011101 。</p>
<p>小数转换为浮点格式的二进制数后，尾数部分的取值范围为  1 ≤ mantissa ＜ 2 ，这说明尾数的整数部分一定为  1 ，是一个恒定的值，这样就无需在内存中体现出来，可以将其直接截掉，只要把小数点后面的二进制数字放入内存中即可。</p>
<p>对于  1.0011101 ，就是把  0011101  放入内存就可以了。</p>
<p>如果  base  采用其它进制，那么尾数的整数部分就不是固定的，它有多种取值的可能，以十进制为例，尾数的整数部分可能是  1~9  之间的任何一个值，这样一来尾数的整数部分就不能省略了，必须在内存中体现出来。所以将  base  设置为二进制就可以节省掉一个位（ Bit ）的内存，</p>
<h4 id="5-3-3-指数的存储"><a href="#5-3-3-指数的存储" class="headerlink" title="5.3.3 指数的存储"></a><font size=3>5.3.3 指数的存储</font></h4><p>指数是一个整数，它有正负之分，所以我们不仅需要存储值，还要存储符号。</p>
<p> short 、 int 、 long  等类型的整数在内存中的存储采用的是补码加符号位的形式，数值在写入内存之前必须先进行转换，读取以后还要再转换一次。但是为了提高效率，避免繁琐的转换，指数的存储并没有采用补码加符号位的形式。那是怎么进行的呢？</p>
<p>以 float 为例，它的指数部分占 8 位，可以表示 0~255 的值。</p>
<img data-src="https://fanhua-picture.oss-cn-hangzhou.aliyuncs.com/01%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/01HQ%E8%AF%BE%E7%A8%8B%E4%BD%93%E7%B3%BB/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/LV01-01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/img/image-20220331190408975.png" alt="image-20220331190408975" style="zoom: 50%;" />

<p>那么我们就取中间值 127 ，指数在写入内存前先加上 127 ，读取时再减去 127 ，此时正负就很容易区分了。</p>
<details class="folding-tag" blue><summary> 点击查看中间值取法 </summary>
              <div class='content'>
              <p>设中间值为  median ，指数部分占用的内存为  n  位，那么中间值的计算方法如下：<br>$$<br>median &#x3D; 2^{n-1} - 1<br>$$<br>对于  float ，中间值为 $2^{8-1} - 1 &#x3D; 127$；对于  double ，中间值为 $2^{11-1} -1 &#x3D; 1023$。</p><p>我们可以将内存中存储的指数命名为  exp ，那么有内存中的指数等于真实指数加上中间值，即：<br>$$<br>exp &#x3D; exponent + median<br>$$</p>
              </div>
            </details>

<p>例如 19.625 转换后的指数为 4 ，用 4 加上 127 ，结果就是 131 ，转换为二进制就是 1000 0011 ，这就是指数部分在内存中二进制形式。</p>
<h3 id="5-4-验证存储方式"><a href="#5-4-验证存储方式" class="headerlink" title="5.4 验证存储方式"></a><font size=3>5.4 验证存储方式</font></h3><p>小数的存储还是比较复杂的，我们可以来验证一下，后边我们会学习到结构体，也会接触到位域。</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="comment">/* 浮点数结构体 */</span></span><br><span class="line"><span class="comment">/* 小端模式下，靠下的为高位，靠上的为低位*/</span></span><br><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span> <span class="title">Float_data</span></span></span><br><span class="line"><span class="class">&#123;</span></span><br><span class="line">	<span class="type">unsigned</span> <span class="type">int</span> nMant : <span class="number">23</span>;  <span class="comment">/* 尾数部分 */</span></span><br><span class="line">    <span class="type">unsigned</span> <span class="type">int</span> nExp : <span class="number">8</span>;    <span class="comment">/* 指数部分 */</span></span><br><span class="line">	<span class="type">unsigned</span> <span class="type">int</span> nSign : <span class="number">1</span>;   <span class="comment">/* 符号位 */</span> </span><br><span class="line">&#125;FP_SINGLE;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">(<span class="type">int</span> argc, <span class="type">const</span> <span class="type">char</span> *argv[])</span> </span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">float</span> temp = <span class="number">19.625</span>;</span><br><span class="line">    FP_SINGLE *p = (FP_SINGLE*)&amp;temp;</span><br><span class="line">   </span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;sign: %x\n&quot;</span>, p-&gt;nSign);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;exp: %x\n&quot;</span>, p-&gt;nExp);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;mant: %x\n&quot;</span>, p-&gt;nMant);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>然后在命令行运行以下命令：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">gcc test.c -Wall</span><br><span class="line">./a.out</span><br></pre></td></tr></table></figure>

<p>会看到以下输出：</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sign: 0</span><br><span class="line">exp: 83</span><br><span class="line">mant: 1d0000</span><br></pre></td></tr></table></figure>

<p>我们无法打印二进制数据，但是可以用十六进制数代替，换算一下即可：</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sign: <span class="number">0</span></span><br><span class="line"><span class="built_in">exp</span>: <span class="number">83</span> = <span class="number">1000</span> <span class="number">0011</span></span><br><span class="line">mant: <span class="number">1</span>d0000 = <span class="number">0001</span> <span class="number">1101</span> <span class="number">0000</span> <span class="number">0000</span> <span class="number">0000</span> <span class="number">0000</span></span><br></pre></td></tr></table></figure>

<h2 id="6-字符"><a href="#6-字符" class="headerlink" title="6. 字符"></a><font size=3>6. 字符</font></h2><p>之前的时候，我一直以为 C 语言中的字符都是以 ASCII 码的形式存储在内存中，但是后来发现，不仅仅是这样。在 C 语言中，只有  char  类型的窄字符才使用  ASCII  编码， char  类型的窄字符串、 wchar_t  类型的宽字符和宽字符串都不使用  ASCII  编码。</p>
<h3 id="6-1-ASCII-码"><a href="#6-1-ASCII-码" class="headerlink" title="6.1 ASCII 码"></a><font size=3>6.1 ASCII 码</font></h3><p>上边我们已经见识了一张 ASCII 码表，那么这究竟是什么呢？</p>
<p>一个二进制位( Bit )有 0 和 1 两种状态，一个字节( Byte )有 8 个二进制位，有 256 种状态，每种状态对应一个符号，就是 256 个符号，从 0000 0000 到 1111 1111 。</p>
<p>计算机也只认识 0 和 1 ，那么对于字符来说也就需要转化为二进制的形式了。当初计算机是诞生于美国，在考虑计算机显示文字的问题时，美国制定了一套英文字符与二进制位的对应关系，称为 <strong>ASCII</strong> （ American Standard Code for Information Interchange ，美国信息交换标准代码）。</p>
<p>标准 ASCII 码规定了 128 个英文字符与二进制的对应关系，占用一个字节（实际上只占用了一个字节的后面 7 位，最前面 1 位统一规定为 0 ），这一位被称为<strong>奇偶校验位</strong>。后边的 128 个被称为扩展 ASCII 码。</p>
<details class="folding-tag" blue><summary> 点击查看什么是奇偶校验位 </summary>
              <div class='content'>
              <p>所谓奇偶校验，是指在代码传送过程中用来检验是否出现错误的一种方法，一般分奇校验和偶校验两种。奇校验规定：正确的代码一个字节中 1 的个数必须是奇数，若非奇数，则在最高位 b7 添 1 ；偶校验规定：正确的代码一个字节中 1 的个数必须是偶数，若非偶数，则在最高位 b7 添 1 。</p>
              </div>
            </details>

<h3 id="6-2-宽字符与窄字符"><a href="#6-2-宽字符与窄字符" class="headerlink" title="6.2 宽字符与窄字符"></a><font size=3>6.2 宽字符与窄字符</font></h3><p>上边我们提到了宽字符和窄字符，这又是什么呢？宽窄字符是与一<strong>个字符所占的字节数有关</strong>，如果一个字符只占 1 个字节，那么它就是窄字符，一个宽字符通常占 2 个字节。在 C 语言中， char 类型就是占 1 个字节，它属于窄字符，这种类型的字符可以与 ASCII 一一对应。</p>
<p>我们在以往的编程中，会发现，在 C 语言中是可以使用中文的，但是我们的中文可是远远多于 256 的，也用 ASCII 来对应的话，显然是不可能的。那么中文怎么存储呢？</p>
<h3 id="6-3-宽字符的存储"><a href="#6-3-宽字符的存储" class="headerlink" title="6.3 宽字符的存储"></a><font size=3>6.3 宽字符的存储</font></h3><p>C 语言是一门全球化的编程语言，它支持世界上任何一个国家的语言文化，包括中文、日语、韩语等。只是我们使用英文更多些罢了，而且似乎也会更方便些。上边我们提到了一个问题，那就是中文字符怎么存储，其实不仅仅是中文字符，除了 char 类型的窄字符，那些宽字符怎么存储呢？</p>
<details class="folding-tag" blue><summary> 点击查看需要解决的三个问题 </summary>
              <div class='content'>
              <ul><li>（1）足够长的数据类型</li></ul><p>char  只能处理  ASCII  编码中的英文字符，是因为  char  类型太短，只有一个字节，容纳不下我们的几万个汉字，要想处理中文字符，必须得使用更长的数据类型。</p><p>一个字符在存储之前会转换成它在字符集中的编号，而这样的编号是一个整数（就类似于 ASCII 码），所以我们可以用整数类型来存储一个字符，比如  unsigned short 、 unsigned int 、 unsigned long  等。</p><ul><li>（2）选择包含中文的字符集</li></ul><p>C 语言规定，对于汉语等  ASCII  编码之外的单个字符，也就是专门的字符类型，要<strong>使用宽字符的编码方式</strong>。常见的宽字符编码有  UTF-16  和  UTF-32 ，它们都是基于  Unicode  字符集的，能够支持全球的语言文化。</p><details class="folding-tag" blue><summary> 点击查看 Unicode 简介 </summary>              <div class='content'>              <p>Unicode 编码则是采用<strong>双字节</strong> 16 位来进行编号，可编 65536 字符，<strong>基本上包含了世界上所有的语言字符</strong>，它也就成为了全世界一种通用的编码。</p>              </div>            </details><p>在真正实现时，微软编译器（内嵌于  Visual Studio  或者  Visual C++  中）采用  UTF-16  编码，使用  2  个字节存储一个字符，用  unsigned short  类型就可以容纳。 GCC 、 LLVM&#x2F;Clang （内嵌于  Xcode  中）采用  UTF-32  编码，使用  4  个字节存储字符，用  unsigned int  类型就可以容纳。</p><ul><li>（3）跨平台</li></ul><p>不同的编译器可以使用不同的整数类型。如果代码使用  unsigned int  来存储宽字符，那么在微软编译器下就是一种浪费；如果代码使用  unsigned short  来存储宽字符，那么在  GCC 、 LLVM&#x2F;Clang  下就不够。</p>
              </div>
            </details>

<p>为了解决上边的问题， C 语言推出了一种新的类型，叫做  wchar_t 。 w  是  wide  的首字母， t  是  type  的首字符， wchar_t  的意思就是宽字符类型。</p>
<details class="folding-tag" blue><summary> wchar_t 长度 </summary>
              <div class='content'>
              <p> wchar_t  的长度<strong>由编译器决定</strong>：</p><ul><li>在微软编译器下，它的长度是  2 ，相当于  unsigned short ；</li><li>在 GCC 、 LLVM&#x2F;Clang  下，它的长度是  4 ，相当于  unsigned int 。</li></ul>
              </div>
            </details>

<h3 id="6-4-宽字符的使用"><a href="#6-4-宽字符的使用" class="headerlink" title="6.4 宽字符的使用"></a><font size=3>6.4 宽字符的使用</font></h3><p>wchar_t  类型位于  &lt;wchar.h&gt;  头文件中，它使得代码在具有良好移植性的同时，也节省了不少内存。要想使用宽字符的编码方式，就得加上 L 前缀，加上 L 前缀后，所有的字符都将成为宽字符，占用  2  个字节或者  4  个字节的内存，包括  ASCII  中的英文字符。</p>
<details class="folding-tag" blue><summary> 点击查看实例 </summary>
              <div class='content'>
              <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;wchar.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;locale.h&gt;</span> <span class="comment">/* setlocale函数 */</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">(<span class="type">int</span> argc, <span class="type">const</span> <span class="type">char</span> *argv[])</span> </span><br><span class="line">&#123;</span><br><span class="line">	<span class="comment">/* 将本地环境设置为 UTF-8 简体中文 */</span></span><br><span class="line">    setlocale(LC_ALL, <span class="string">&quot;zh_CN.UTF-8&quot;</span>);</span><br><span class="line">    <span class="type">wchar_t</span> a = <span class="string">L&#x27;A&#x27;</span>;  <span class="comment">//英文字符（基本拉丁字符）</span></span><br><span class="line">	<span class="type">wchar_t</span> b = <span class="string">L&#x27;9&#x27;</span>;  <span class="comment">//英文数字（阿拉伯数字）</span></span><br><span class="line">	<span class="type">wchar_t</span> c = <span class="string">L&#x27;繁&#x27;</span>;  <span class="comment">//中文汉字</span></span><br><span class="line">	<span class="type">wchar_t</span> d = <span class="string">L&#x27;华&#x27;</span>;  <span class="comment">//中文汉字</span></span><br><span class="line">	<span class="type">wchar_t</span> e = <span class="string">L&#x27;。&#x27;</span>;  <span class="comment">//中文标点</span></span><br><span class="line">	<span class="type">wchar_t</span> f = <span class="string">L&#x27;♥&#x27;</span>;   <span class="comment">//特殊符号</span></span><br><span class="line">	<span class="type">wchar_t</span> g = <span class="string">L&#x27;༄&#x27;</span>;  <span class="comment">//藏文</span></span><br><span class="line"></span><br><span class="line">	wprintf(<span class="string">L&quot;Wide chars: %lc %lc %lc %lc %lc %lc %lc\n&quot;</span>,  <span class="comment">//必须使用宽字符串</span></span><br><span class="line">        	a, b, c, d, e, f, g);</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>然后在命令行运行以下命令：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">gcc test.c -Wall</span><br><span class="line">./a.out</span><br></pre></td></tr></table></figure><p>会看到以下输出：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Wide chars: A 9 繁 华 。 ♥ ༄</span><br></pre></td></tr></table></figure><p>【注意】</p><p>（1）宽字符的输出要用到 wprintf 函数。</p><p>（2）注意设置语言环境，否则输出的可能全是 ? 。</p>
              </div>
            </details>

<h1 id="四、源文件编码"><a href="#四、源文件编码" class="headerlink" title="四、源文件编码"></a><font size=3>四、源文件编码</font></h1><p>上边了解了 C 语言中字符的编码，源文件也是存储在计算机中的，那源文件是什么编码呢？源文件最终会被存储到本地硬盘，或者远程服务器，这个时候就要尽量压缩文件体积，以节省硬盘空间或者网络流量，而代码中大部分的字符都是  ASCII  编码中的字符，用一个字节足以容纳，所以  UTF-8  编码是一个不错的选择。</p>
<p> UTF-8  兼容  ASCII ，并且 UTF-8  基于  Unicode ，支持全世界的字符。常见的  IDE  或者编辑器，例如  Xcode 、 Gedit 、 Vim  等，在创建源文件时一般也默认使用  UTF-8  编码。</p>
<p>还有一种是本地编码，所谓本地编码就是像  GBK 、 Big5 、 Shift-JIS  等这样的国家编码（地区编码）；针对不同国家发行的操作系统，默认的本地编码一般不同。简体中文版本的  Windows  默认的本地编码是  GBK 。 Visual Studio  就默认使用本地编码来创建源文件。</p>
<p>对于编译器来说，它往往支持多种编码格式的源文件。微软编译器、 GCC 、 LLVM&#x2F;Clang （内嵌于  Xcode  中）都支持  UTF-8  和本地编码的源文件，微软编译器还支持  UTF-16  编码的源文件。如果考虑到源文件的通用性，就只能使用  UTF-8  和本地编码了。</p>
<h1 id="五、常见编码方式"><a href="#五、常见编码方式" class="headerlink" title="五、常见编码方式"></a><font size=3>五、常见编码方式</font></h1><h2 id="1-ASCII-码"><a href="#1-ASCII-码" class="headerlink" title="1. ASCII 码"></a><font size=3>1. ASCII 码</font></h2><p>前边介绍过了，它总共有  128  个，主要是用于窄字符的编码。</p>
<h2 id="2-ISO-8859-1"><a href="#2-ISO-8859-1" class="headerlink" title="2. ISO-8859-1 "></a><font size=3>2. ISO-8859-1 </font></h2><p>ISO  组织在  ASCII  码基础上制定了一些列标准用来扩展  ASCII  编码，它们是  ISO-8859-1~ISO-8859-15 ，其中  ISO-8859-1  涵盖了大多数西欧语言字符，所有应用的最广泛。 ISO-8859-1  仍然是单字节编码，它总共能表示  256  个字符。</p>
<h2 id="3-GB2312"><a href="#3-GB2312" class="headerlink" title="3. GB2312 "></a><font size=3>3. GB2312 </font></h2><p>全称是《信息交换用汉字编码字符集 基本集》，它是<strong>双字节编码</strong>，总的编码范围是  A1-F7 ，其中从  A1-A9  是符号区，总共包含  682  个符号，从  B0-F7  是汉字区，包含  6763  个汉字。</p>
<h2 id="4-GBK"><a href="#4-GBK" class="headerlink" title="4. GBK  "></a><font size=3>4. GBK  </font></h2><p>全称叫《汉字内码扩展规范》，是国家技术监督局为  windows95  所制定的新的汉字内码规范，它的出现是为了扩展  GB2312 ，加入更多的汉字。</p>
<p>它的编码范围是  8140~FEFE （去掉  XX7F ）总共有  23940  个码位，它能表示  21003  个汉字，它的编码是和  GB2312  兼容的。 </p>
<h2 id="5-GB18030"><a href="#5-GB18030" class="headerlink" title="5. GB18030  "></a><font size=3>5. GB18030  </font></h2><p>全称是《信息交换用汉字编码字符集》，是我国的强制标准，它可能是单字节、双字节或者四字节编码，它的编码与  GB2312  编码兼容。</p>
<h2 id="6-Unicode-字符集"><a href="#6-Unicode-字符集" class="headerlink" title="6. Unicode 字符集"></a><font size=3>6. Unicode 字符集</font></h2><p>前边也大致介绍了一下，这与 ASCII 很类似， Unicode  相当于一本很厚的字典，记录着世界上所有字符对应的一个数字。</p>
<p>它<strong>仅仅只是一个字符集</strong>，规定了符合对应的二进制代码，至于这个二进制代码如何存储则没有任何规定。</p>
<h2 id="7-UTF-16"><a href="#7-UTF-16" class="headerlink" title="7. UTF-16 "></a><font size=3>7. UTF-16 </font></h2><p> UTF-16  具体定义了  Unicode  字符在计算机中存取方法。 UTF-16  用两个字节来表示  Unicode  转化格式，这个是定长的表示方法，不论什么字符都可以用两个字节表示，两个字节是  16  个  bit ，所以叫  UTF-16 。</p>
<p> UTF-16  表示字符非常方便，每两个字节表示一个字符，这样在字符串操作时就大大简化了操作。</p>
<h2 id="8-UTF-8"><a href="#8-UTF-8" class="headerlink" title="8. UTF-8 "></a><font size=3>8. UTF-8 </font></h2><p>UTF-16  统一采用两个字节表示一个字符，虽然在表示上非常简单方便，但是有很大一部分字符用一个字节就可以表示的现，这样存储空间放大了一倍，珍贵的内存空间就被浪费掉了。</p>
<p>UTF-8  全称 8bit Unicode Transformation Format ， 8 比特的 Unicode 通用转换格式。它采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由  1~6  个字节组成。 编码规则如下：</p>
<ul>
<li><p>对于单字节的符号, 字节的第一位（最高位，也就是第 8 位）设为 0 , 后面 7 位为这个符号的 unicode 码. 因此对于英语字母,来说， UTF-8 编码和 ASCII 码是相同的.</p>
</li>
<li><p>对于 n 字节的符号( n &gt; 1 ), 第一个字节的前 n 位都设为 1 ，第  n+1  位设为 0 ，后面剩余的 n - 1 个字节的前两位一律设为 10 。剩下的二进制位, 全部为这个符号的 Unicode 码.</p>
</li>
</ul>
<table>
    <tr><td align="center">n</td><td align="center" width=210px>Unicode 十六进制码范围 </td><td align="center">UTF-8 二进制</td></tr>
    <tr><td align="center">1</td><td align="center" width=210px>0000 0000 - 0000 007F	</td><td align="left">0xxxxxxx</td></tr>
    <tr><td align="center">2</td><td align="center" width=210px>0000 0080 - 0000 07FF	</td><td align="left">110xxxxx 10xxxxxx</td></tr>
    <tr><td align="center">3</td><td align="center" width=210px>0000 0800 - 0000 FFFF	</td><td align="left">1110xxxx 10xxxxxx 10xxxxxx</td></tr>
    <tr><td align="center">4</td><td align="center" width=210px>0001 0000 - 0010 FFFF	</td><td align="left">11110xxx 10xxxxxx 10xxxxxx 10xxxxxx</td></tr>
    <tr><td align="center">5</td><td align="center" width=210px>0020 0000 - 03FF FFFF	</td><td align="left">111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx</td></tr>
    <tr><td align="center">6</td><td align="center" width=210px>0400 0000 - 7FFF FFFF	</td><td align="left">1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx</td></tr>
</table>
【注意】在 UTF-8 编码中，英文字符占一个字节，中文字符占用 3 个字节。


    </div>

    
    
    

    <footer class="post-footer">




    <div>
        
            <div style="text-align:center;color: #ccc;font-size:14px;">
            ----------本文结束
            <i class="fas fa-fan fa-spin" style="color: #FF1493; font-size: 1rem"></i>
            感谢您的阅读----------
            </div>
        
    </div>





  
  <div class="my_post_copyright"> 
    <p><span>文章标题:</span><a href="/post/e8ba6a9c.html">LV01-01-C语言-数据类型</a></p>
    <p><span>文章作者:</span><a href="/" title="欢迎访问 《苏木》 的学习笔记">苏木</a></p>
    <p><span>发布时间:</span>2022年01月10日 - 16:29</p>
    <p><span>最后更新:</span>2025年06月14日 - 00:25</p>
    <p><span>原始链接:</span><a href="/post/e8ba6a9c.html" title="LV01-01-C语言-数据类型">https://sumumm.github.io/post/e8ba6a9c.html</a></p>
    <p><span>许可协议:</span><i class="fab fa-creative-commons"></i> <a rel="license" href= "https://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank" title="Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)">署名-非商业性使用-禁止演绎 4.0 国际</a> 转载请保留原文链接及作者。</p>  
  </div>
  


          <div class="post-tags">
              <a href="/tags/LV01-C%E8%AF%AD%E8%A8%80%E5%9F%BA%E7%A1%80/" rel="tag"><i class="fa fa-tag"></i> LV01-C语言基础</a>
          </div>

        

          <div class="post-nav">
            <div class="post-nav-item">
                <a href="/post/ce2c2639.html" rel="prev" title="LV01-02-C语言-变量与运算符">
                  <i class="fa fa-angle-left"></i> LV01-02-C语言-变量与运算符
                </a>
            </div>
            <div class="post-nav-item">
            </div>
          </div>
    </footer>
  </article>
</div>






</div>
  </main>

  <footer class="footer">
    <div class="footer-inner">

  <div class="copyright">
    &copy; 2017 – 
    <span itemprop="copyrightYear">2025</span>
    <span class="with-love">
      <i class="fa fa-heart"></i>
    </span>
    <span class="author" itemprop="copyrightHolder">苏木</span>
  </div>
<div class="wordcount">
  <span class="post-meta-item">
    <span class="post-meta-item-icon">
      <i class="fa fa-chart-line"></i>
    </span>
      <span>站点总字数：</span>
    <span title="站点总字数">3.7m</span>
  </span>
  <span class="post-meta-item">
    <span class="post-meta-item-icon">
      <i class="fa fa-coffee"></i>
    </span>
      <span>站点阅读时长 &asymp;</span>
    <span title="站点阅读时长">225:26</span>
  </span>
</div>




    <span id="sitetime"></span>
    <script defer language=javascript>
        function siteTime()
        {
            window.setTimeout("siteTime()", 1000);
            var seconds = 1000;
            var minutes = seconds * 60;
            var hours = minutes * 60;
            var days = hours * 24;
            var years = days * 365;
            var today = new Date();
            var todayYear = today.getFullYear();
            var todayMonth = today.getMonth()+1;
            var todayDate = today.getDate();
            var todayHour = today.getHours();
            var todayMinute = today.getMinutes();
            var todaySecond = today.getSeconds();
            /*==================================================
            Date.UTC() -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)
            year        - 作为date对象的年份，为4位年份值
            month       - 0-11之间的整数，做为date对象的月份
            day         - 1-31之间的整数，做为date对象的天数
            hours       - 0(午夜24点)-23之间的整数，做为date对象的小时数
            minutes     - 0-59之间的整数，做为date对象的分钟数
            seconds     - 0-59之间的整数，做为date对象的秒数
            microseconds - 0-999之间的整数，做为date对象的毫秒数
            ==================================================*/
            var t1 = Date.UTC(2017, 
                              5, 
                              19, 
                              0, 
                              0, 
                              0); //北京时间
            var t2 = Date.UTC(todayYear,todayMonth,todayDate,todayHour,todayMinute,todaySecond);
            var diff = t2-t1;
            var diffYears = Math.floor(diff/years);
            var diffDays = Math.floor((diff/days)-diffYears*365);
            var diffHours = Math.floor((diff-(diffYears*365+diffDays)*days)/hours);
            var diffMinutes = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours)/minutes);
            var diffSeconds = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours-diffMinutes*minutes)/seconds);
            document.getElementById("sitetime").innerHTML="已在这里 "+diffYears+" 年 "+diffDays+" 天 "+diffHours+" 小时 "+diffMinutes+" 分钟 "+diffSeconds+" 秒";
        }
        siteTime();
    </script>



    </div>
  </footer>

  
  <div class="back-to-top" role="button" aria-label="返回顶部">
    <i class="fa fa-arrow-up fa-lg"></i>
    <span>0%</span>
  </div>
  <div class="reading-progress-bar"></div>

<noscript>
  <div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
</noscript>


  
  <script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/next-theme-pjax/0.6.0/pjax.min.js" integrity="sha256-vxLn1tSKWD4dqbMRyv940UYw4sXgMtYcK6reefzZrao=" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/fancyapps-ui/5.0.28/fancybox/fancybox.umd.js" integrity="sha256-ytMJGN3toR+a84u7g7NuHm91VIR06Q41kMWDr2pq7Zo=" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/lozad.js/1.16.0/lozad.min.js" integrity="sha256-mOFREFhqmHeQbXpK2lp4nA3qooVgACfh88fpJftLBbc=" crossorigin="anonymous"></script>
<script src="/js/comments.js"></script><script src="/js/utils.js"></script><script src="/js/motion.js"></script><script src="/js/next-boot.js"></script><script src="/js/pjax.js"></script>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/hexo-generator-searchdb/1.4.1/search.js" integrity="sha256-1kfA5uHPf65M5cphT2dvymhkuyHPQp5A53EGZOnOLmc=" crossorigin="anonymous"></script>
<script src="/js/third-party/search/local-search.js"></script>




  <script src="/js/third-party/fancybox.js"></script>

  <script src="/js/third-party/pace.js"></script>


  




  

  <script class="next-config" data-name="enableMath" type="application/json">true</script><script class="next-config" data-name="mathjax" type="application/json">{"enable":true,"tags":"none","js":{"url":"https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-mml-chtml.js","integrity":"sha256-MASABpB4tYktI2Oitl4t+78w/lyA+D7b/s9GEP0JOGI="}}</script>
<script src="/js/third-party/math/mathjax.js"></script>


 
        <div id="click-show-text"
            data-mobile = false
            data-text = 富强,民主,文明,和谐,自由,平等,公正,法制,爱国,敬业,诚信,友善
            data-fontsize = 15px
            data-random= false>
        </div>
       

      
        <script async src=https://cdn.jsdelivr.net/npm/hexo-next-mouse-effect@latest/click/showText.js></script>
      

      
    




    <script async src="/js/fancybox_param.js"></script>





<!-- APlayer本体 -->



</body>
</html>
